<?php
/**
 * @brief  Klasa encyjna OfferComponent
 * 
 * Obiekty tej klasy reprezentują przyporządkowanie towarów do ofert.
 * Każda taka para posiada przyporządkowaną parę współczynników.
 * Sharefactor informujący czy w ramach oferty, dany towar jest sprzedawany, czy kupowany.
 * Udział wyznaczający stosunek ilościowy towaru do innych towarów z oferty.
 * 
 * Np. Jak towar A ma udział 2 a towar B udział 1 i oba sahrefactor -1, to oznacza, że 
 * sprzedawane jest 2 razy mniej towaru B. 
 * 
 */
class Application_Model_OfferComponent
{
    protected $_Offer_id;  /*!< Identyfikator oferty.*/
    protected $_Commodity_id;  /*!< Identyfikator towaru.*/
    protected $_shareFactor;  /*!< Współczynnik informujący czy towar jest kupowany czy sprzedawany.*/
    protected $_quantity;  /*!< Udział towaru.*/
    
    protected $_Offer;  /*!< Powiązana oferta. */
    protected $_Commodity;  /*!< Powiązany towar.*/

    /**
     * @brief Metoda zwracająca identyfikator oferty.
     *
     * @return int 
     */
    public function getOffer_id() {
        return $this->_Offer_id;
    }
    /**
     * @brief Metoda ustawiająca identyfikator oferty.
     *
     * @param int $_Offer_id 
     */
    public function setOffer_id($_Offer_id) {
        $this->_Offer_id = $_Offer_id;
    }
    /**
     * @brief Metoda zwracająca identyfikator towaru.
     *
     * @return int 
     */
    public function getCommodity_id() {
        return $this->_Commodity_id;
    }
    /**
     * @brief Metoda ustawiająca identyfikator towaru.
     *
     * @param int $_Commodity_id 
     */
    public function setCommodity_id($_Commodity_id) {
        $this->_Commodity_id = $_Commodity_id;
    }
    /**
     * @brief Metoda zwracająca sharefactor.
     *
     * @return -1 jak towar sprzedawany, 1 jak kupowany
     */
    public function getShareFactor() {
        return $this->_shareFactor;
    }
    /**
     * @brief Metoda ustawiająca sharefactor.
     *
     * @param float $_shareFactor 
     */
    public function setShareFactor($_shareFactor) {
        $this->_shareFactor = $_shareFactor;
    }
    /**
     * @brief Metoda zwracająca udział towaru w pakiecie,
     *
     * @return int 
     */
    public function getQuantity() {
        return $this->_quantity;
    }
    /**
     * @brief Metoda ustawiająca  udział towaru w pakiecie.
     *
     * @param int $_quantity 
     */
    public function setQuantity($_quantity) {
        $this->_quantity = $_quantity;
    }
    /**
     * @brief Metoda zwracająca powiązaną ofertę.
     *
     * @return Application_Model_Offer
     */
    public function getOffer() {
        if(!isset($this->_Offer))
        {
            try{
            $this->setOffer();
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        }
        return $this->_Offer;
    }
    /**
     * @brief Metoda ustawiająca powiązaną ofertę.
     * 
     */
    public function setOffer() {
        if(!isset($this->_Offer_id)) throw new Exception('Nie można wykonać tej akcji na pustym obiekcie');
        $mapper = new Application_Model_OfferMapper();
        $Offer = $mapper->find($this->_Offer_id);
        if(!isset($Offer)) throw new Exception('Nie znaleziono oferty o podanym identyfikatorze');
        $this->_Offer = $Offer;
        
    }
    /**
     * @brief Metoda zwracająca powiązany towar.
     *
     * @return Application_Model_Commodity
     */
    public function getCommodity() {
        if(!isset($this->_Commodity))
        {
            try{
            $this->setCommodity();
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        }
        return $this->_Commodity;
    }
    /**
     * @brief Metoda ustawiająca powiązany towar.
     * 
     */
    public function setCommodity() {
        if(!isset($this->_Commodity_id)) throw new Exception('Nie można wykonać tej akcji na pustym obiekcie');
        $mapper = new Application_Model_CommodityMapper();
        $Commodity = $mapper->find($this->_Commodity_id);
        if(!isset($Commodity)) throw new Exception('Nie znaleziono towaru o podanym identyfikatorze');
        $this->_Commodity = $Commodity;
    }




}

